// 栈
#ifndef SQ_STACK_H
#define SQ_STACK_H

// 栈的元素最大个数（初始分配增量）
#define MAX_SIZE 1000

/// @brief 栈结构体
typedef struct
{
	char *base;		  // 栈底指针
	char *top;		  // 栈顶指针
	int stackMaxSize; // 当前已分配的最大空间，以元素为单位
} Stack;

/// @brief 初始化一个空栈
/// @return 栈对象指针
Stack *initStack();

/// @brief 判断栈是否为空
/// @param stack 传入栈的指针
/// @return 栈是否为空
int stackEmpty(Stack *);

/// @brief 返回栈的长度
/// @param stack 传入栈的指针
/// @return 栈的元素个数
int stackLength(Stack *);

/// @brief 查看栈顶元素
/// @param stack 传入栈指针
/// @return 栈顶元素
char getTop(Stack *);

/// @brief 元素压入栈
/// @param stack 传入栈的指针
/// @param e 放入元素
void push(Stack *, char);

/// @brief 弹出栈顶元素
/// @param stack 传入栈指针
/// @return 弹出的元素
char pop(Stack *);

#include "./stack.c"

#endif